package com.jrsoft.jrcore.base

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.fragment.app.Fragment
import me.yokeyword.fragmentation.SupportFragment

/**
 * 所属系统:  杨梅红画院移动端
 * 所属模块:   基础模块
 * 功能描述:   fragment封装基类
 * 创建时间: 2020/5/14 10:53
 * 维护人:  杨广
 * Copyright @ Jerrisoft 2019. All rights reserved.
 *┌──────────────────────────────────────────────────────────────┐
 *│ 此技术信息为本公司机密信息，未经本公司书面同意禁止向第三方披露．   │
 *│ 版权所有：杰人软件(深圳)有限公司                                │
 *└──────────────────────────────────────────────────────────────┘
 */
abstract class CoreFragment<VM : BaseViewModel>() : SupportFragment() {
    private var mIsHasData = false//是否加载过数据
    protected var mRootView: View? = null
    protected lateinit var mViewModel: VM

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        if (mRootView == null) {
            mRootView = View.inflate(container?.context, getLayoutResId(), null)
        }
        return mRootView
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        mViewModel = initVM()
        initView()
        startObserve()
    }

    override fun onResume() {
        super.onResume()
        lazyLoadData()
    }

    private fun initViewModelAction() {}

    /**
     * @des { 获取布局id.子类设置布局用 }
     * @author 杨广
     * @date 2020/05/14 11:32
     */
    abstract fun getLayoutResId(): Int

    /**
     * @des { 初始化ViewModel }
     * @author 杨广
     * @date 2020/05/14 11:32
     */
    abstract fun initVM(): VM

    /**
     * @des { 初始化视图 }
     * @author 杨广
     * @date 2020/05/14 11:32
     */
    abstract fun initView()

    /**
     * @des { 初始化数据 }
     * @author 杨广
     * @date 2020/05/14 11:32
     */
    abstract fun initData()

    /**
     * @des { 开始观察数据变化 }
     * @author 杨广
     * @date 2020/05/14 11:32
     */
    abstract fun startObserve()

    /**
     * @des { 懒加载 当fragment对于用户可见时调用 }
     * @author 杨广
     * @date 2020/05/14 11:32
     */
    private fun lazyLoadData() {
        if (!mIsHasData) {
            mIsHasData = true
            initData()
        }
    }

}